Інформація про новину
  • Переглядів: 4537
  • Дата: 4-10-2021, 08:24
4-10-2021, 08:24

28. Обробники подій в Python

Категорія: Інформатика





Попередня сторінка:  27. Графічний інтерфейс користувача в Py...
Наступна сторінка:   29. Організація діалогу користувача з п...

Основна відмінність програм із графічним інтерфейсом користувача — інтерактивність. Хід виконання таких програми залежить від втручання користувача, який постійно взаємодіє з програмою (натискає кнопки, вводить дані тощо, тобто створює події).

Подія — це зовнішній вплив на об’єкт, на який цей об’єкт може реагувати певним чином.

Для того щоб об’єкт міг реагувати на певну подію, слід створити обробник події — блок програмного коду, який виконується в разі настання події, з якою він пов’язаний.

Створення обробників подій

У мові Python обробником події є певна функція.

Функція — іменований блок коду. Кожна функція має назву, тіло і може мати перелік параметрів. У Python функції визначаються за допомогою зарезервованого слова def.

Як ви вже знаєте, синтаксис опису функції такий:

Тіло функції являє собою послідовність операторів, які будуть виконані після викликання функції.

Згадаймо, як створити обробник події для віджета класу Button — командної кнопки. Командна кнопка застосовується для того, щоб запустити або завершити певний процес опрацювання даних.

Щоб прикріпити до віджета обробник події Натискання на кнопку, необхідно під час створення цього об’єкта в переліку параметрів присвоїти параметру command посилання на функцію, яка виконуватиметься в разі натискання (рис. 28.1).

Створимо кнопку із заголовком Натисни мене!, яка виводить повідомлення Клік! (рис. 28.2). У цьому коді функція button_dicked викликається щоразу, коли користувач натискає кнопку buttonl:

Як ви знаєте, обробником події може бути один із методів класу.

Створимо клас SmartButton — кнопку, яка підраховує кількість натискань і виводить результат у заголовку форми, на якій вона розміщена. Як базовий використаємо знайомий вам клас Button:

Як бачимо, клас SmartButton має конструктор__і nit__, у першому

рядку якого за допомогою спеціального об’єкта super() викликається

конструктор базового класу (super().__init__). Це потрібно для того, щоб

повністю налаштувати кнопку Button, яка буде основою для SmartButton. Як обробник події їй передається метод self.btn_dick.

В останньому рядку методу-обробника btn_dick кнопка через атрибут master звертається до форми, яка містить цю кнопку, щоб змінити її заголовок (title). Тепер можна скласти програму з використанням класу SmartButton:

Програмування реакції об'єктів на інші події

Можна зробити так, щоб об’єкт змінював свої властивості у відповідь на натискання певної клавіші клавіатури або миші.

Віджет із подією та функцією-обробником пов’язують викликом методу bind() (рис. 28.3):

<віджет>.Ь^(<подія>, <функція>), де <подія> — рядок із системною назвою події;

<функція> — назва функції-обробника.

У такий спосіб один віджет можна пов’язати з кількома подіями. Який із віджетів має відреагувати на натискання клавіші, якщо у вікні їх декілька? Щоб це задати, для потрібного віджета слід викликати метод focus_set(). Дізнатися ж, який із віджетів має фокус, можна, викликавши для будь-якого з них метод focus_get().

Якщо подію пов’язати з певним вікном, то серед віджетів, розташованих у вікні віджетів, на неї реагуватиме той, який має фокус.

Запрограмуємо віджети у вікні root так, щоб той, на якому щойно клацнули, при натисканні клавіші зі стрілкою —*■ рухався вправо:

Тут в обробниках подій з об’єкта event за допомогою атрибута widget здійснюється доступ до віджета, для якого обробляється подія. Методи winfo_x() і winfo_y() цього об’єкта повертають його координати х і у відносно вікна.

Макс Левчин (рис. 28.4) — американський підприємець українського походження, співзасновник PayPal і автор низки старта-пів. Він вважає, що вивчення програмування стане величезною ракетою-носієм для вашого майбутнього незалежно від професійних планів.

Ознайомимося з формами назв подій.

• Один символ — натискання клавіші клавіатури:

Функцію action буде викликано кожного разу, коли віджет lab у фокусі і натиснуто клавішу г.

натискання клавіш керування курсором.

Функція, яку буде викликано в разі настання події, повинна приймати один аргумент. Це об’єкт класу Event, що має, серед інших, атрибути, які стануть вам у нагоді при створенні програм — наприклад, щоб змусити об’єкти рухатися по вікну:

• х і у — координати вказівника миші на віджеті;

• char — набраний на клавіатурі символ;

• keysym_num — код набраного на клавіатурі символу.

Питання для самоперевірки

1. Визначте, як виглядає кнопка, створена з такими значеннями атрибутів:

2. Опишіть алгоритм розробки програми з графічним інтерфейсом на Python.

3. У коді конструктора класу поясніть дію команди:

4. Обговоріть відмінності у застосуванні обробника натискання на кнопку та обробника натискання зазначеної клавіші клавіатури або миші.

5. Запишіть оператор виклику для об’єкта lab методу bind() для обробки натискання клавіші зі стрілкою [.

6. Опишіть функцію — обробник події Натискання на літеру А, яка пересуває об’єкт, що викликав обробник, на 5 пікселів угору.

Вправа 28

Створити програму з елементами керування, властивості яких змінюються під час виконання програми.

1) Завантажте середовище розробки PyCharm.

Створіть Python file із назвою Цікаві кнопки. Створіть вікно програми розмірами 250x200 із заголовком Цікаві кнопки (рис. 28.5).

Завершіть програму оператором root.mainloop().

2) Розмістіть вгорі вікна кнопку із заголовком Червоний колір, яка займає всю ширину вікна.

Для цього викличте пакувальник

Аналогічно створіть кнопки із заголовками Синій колір, Збільшити шрифт, Зменшити шрифт, Привітатися.

3) Додайте внизу вікна віджет label_text класу Label.

При створенні об’єкта додайте у виклик конструктора класу задання значень атрибутів fg, bg (колір фону, колір шрифту).

4) Створіть обробник події Натискання на кнопку для об’єкта b_red:

За зразком створіть обробник події для кнопки Синій колір. 5) Створіть обробник події для кнопки Збільшити шрифт:

За зразком створіть обробник події для кнопки Зменшити шрифт.

6) Створіть обробник події для кнопки Привітатися, який змінює заголовок напису на Привіт від Python!.

Запустіть програму, перевірте роботу кнопок. Змініть розміри вікна, поясніть поведінку кнопок і напису.

Комп'ютерне тестування

Виконайте тестове завдання 28 із автоматичною

перевіркою результату.

 

Це матеріал з підручника Інформатика 8 клас Бондаренко (2021)

 




Попередня сторінка:  27. Графічний інтерфейс користувача в Py...
Наступна сторінка:   29. Організація діалогу користувача з п...



^